package com.xbongbong.saas.model;

import com.xbongbong.paas.domain.entity.PaasStageEntity;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.ClueStageEntity;

import java.util.List;
import java.util.Map;

public interface ClueStageModel extends IModel<ClueStageEntity> {

    /**
     * @param params 条件map
     * @return List<ClueStageEntity>
     * @Author sunshaoxiang
     * @Description 根据条件 获取实体
     * @Date
     **/
    List<ClueStageEntity> findEntitys(Map<String, Object> params);

    /**
     * 通过主键获取数据
     *
     * @param key    主键
     * @param corpid 公司id
     * @return ClueStageEntity
     */
    ClueStageEntity getByKey(Long key, String corpid);

    /**
     * 通过formId + code获取到一个阶段实体
     * 同一个form下code肯定唯一，但是多个form之间可能不唯一（新初始化的form都用的默认阶段code - 1、2、3、4...）
     *
     * @param corpid 公司id
     * @param formId 模板id
     * @param code   阶段code
     * @return com.xbongbong.saas.domain.entity.ClueStageEntity
     * @author zcp
     * @version v1.0
     * @since v1.0
     */
    ClueStageEntity getByCode(String corpid, Long formId, String code);

    /**
     * 保存
     *
     * @param ClueStageEntity 实体
     */
    Long save(ClueStageEntity ClueStageEntity) throws XbbException;

    /**
     * 获取默认的客户阶段
     *
     * @return 客户阶段列表
     */
    List<ClueStageEntity> getDefaultList();

    /**
     * 批量插入数据
     *
     * @param list 实体列表
     */
    void insertBatch(List<ClueStageEntity> list);

    /**
     * 获取列表
     *
     * @return
     */
    List<ClueStageEntity> getList(String corpid, Long formId, Integer enable);

    void updateBatch(List<ClueStageEntity> ClueStageEntityList, String corpid);

    void updateBatchDefaultAndLinkOption(List<ClueStageEntity> ClueStageEntityList, String corpid);

    void updateBatch4MirrorRollback(List<ClueStageEntity> ClueStageEntityList, String corpid);

    void updateBatch4Script(List<ClueStageEntity> ClueStageEntityList);

    void insertBatch4Script(List<ClueStageEntity> list);

    Integer insert4Script(ClueStageEntity entity);

    Integer deleteBatch(List<PaasStageEntity> clueStageEntityList, String corpid);

}
